/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.quixada.adrs.comandos.adrs;

import br.ufc.quixada.adrs.interfaces.Comando;
import br.ufc.quixada.adrs.model.Doenca;
import br.ufc.quixada.adrs.model.QuestionarioSanitario;
import br.ufc.quixada.adrs.model.TipoDoenca;
import br.ufc.quixada.adrs.model.Visita;
import br.ufc.quixada.adrs.service.TipoDoencaService;
import br.ufc.quixada.adrs.util.Msg;
import br.ufc.quixada.adrs.util.UtilAdrs;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Caio
 */
public class CmdAddQuestionarioSanitario implements Comando {

    private boolean erroDeValidacao;

    public String executa(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();

        if (request.getParameter("concluded").equals("false")) {
            Visita v = (Visita) session.getAttribute("visita");
            v.setData(UtilAdrs.treatToDate(request.getParameter("data")));
            if (v.getData() == null) {
                session.setAttribute("erro", Msg.INPUT_ERROR_WRONG_VISITA_DATE_FORMAT);
                return "/adrs/adrs_add_visita.jsp";
            }
            return "/adrs/adrs_add_quest_sanitario.jsp";
        } else {
            TipoDoencaService tds = new TipoDoencaService();
            Visita v = (Visita) session.getAttribute("visita");

            QuestionarioSanitario qs = new QuestionarioSanitario();
            v.setQuestionarioSanitario(qs);
            qs.setVisita(v);

            String relato = request.getParameter("relato");
            if (relato == null || relato.length() == 0) {
                relato = Msg.RELATO_VAZIO;
            }
            qs.setRelato(relato);

            //get parameters
            if (!request.getParameter("anemia").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("anemia"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("anemia")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_ANEMIA));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("anemia")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("ceratoconjuntivite").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("ceratoconjuntivite"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("ceratoconjuntivite")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_CERATOCONJUNTIVITE));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("ceratoconjuntivite")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("cirurgias").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("cirurgias"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("cirurgias")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_CIRURGIAS));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("cirurgias")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("diarreia").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("diarreia"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("diarreia")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_DIARREIA));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("diarreia")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("ectima").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("ectima"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("ectima")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_ECTIMA));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("ectima")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("linfadenite").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("linfadenite"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("linfadenite")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_LINFADENITE));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("linfadenite")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("mastite").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("mastite"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("mastite")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_MASTITE));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("mastite")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("miiase").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("miiase"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("miiase")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_MIIASE));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("miiase")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("onfalonflebite").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("onfalonflebite"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("onfalonflebite")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_ONFALONFLEBITE));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("onfalonflebite")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("piolho").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("piolho"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("piolho")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_PIOLHO));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("piolho")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("verminose").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("verminose"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("verminose")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_VERMINOSE));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("verminose")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            if (!request.getParameter("outros").equals("")) {
                if (!UtilAdrs.isNumber(request.getParameter("outros"))) {
                    erroDeValidacao = true;
                } else {
                    if (Integer.parseInt(request.getParameter("outros")) > 0) {
                        Doenca d = new Doenca();
                        d.setTipo(tds.getTipoDoencaById(TipoDoenca.TIPO_DOENCA_OUTROS));
                        d.setSanitario(qs);
                        d.setQuantidadeDeCasos(Integer.parseInt(request.getParameter("outros")));
                        qs.getDoencas().add(d);
                    } else {
                        if (Integer.parseInt(request.getParameter("anemia")) < 0) {
                            erroDeValidacao = true;
                        }
                    }
                }
            }
            qs.setDataAtualizacao(v.getData());

            if (erroDeValidacao) {
                session.setAttribute("erro", Msg.NOT_NUMERIC);
                v.setQuestionarioSanitario(qs);
                session.setAttribute("visitaAEditar", v);
                return "/adrs/adrs_add_quest_sanitario.jsp";
            }

            v.setQuestionarioSanitario(qs);
            session.setAttribute("visita", v);
            session.setAttribute("sucesso", Msg.QUESTIONNAIRE_TEMPORARILY_KEPT);
            return "/adrs/adrs_add_visita.jsp";
        }
    }
}
